home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / arcstart.i < prev    next >
Text File  |  1997-10-26  |  4KB  |  149 lines

  1. IMPLEMENTATION MODULE ARCStarter;
  2.  
  3. FROM SYSTEM        IMPORT ADDRESS, ADR;
  4. FROM CatFiles      IMPORT GetPath, SetPath;
  5. FROM MTPaths       IMPORT ImportPath, ExportPath, ARCPath, ARCName,
  6.                           MessagePath, enarcStr, dearcStr;
  7. FROM ARCAss        IMPORT SetTrap, RestoreTrap, TrapProc, SetCharAddress, SetNewProc,
  8.                           SetOutputProc, ClearOutputProc;
  9. FROM Void          IMPORT v;
  10. FROM UserInformation  IMPORT UserBLK;
  11.  
  12. IMPORT MagicDOS;
  13. IMPORT MagicStrings;
  14. IMPORT mtDir;
  15. IMPORT CatGlobal;
  16. IMPORT CatLog;
  17. IMPORT MintUtil;
  18. IMPORT ExecV;
  19.  
  20. (*$R-,S-*)
  21.  
  22. (* entarct Datei <FileName> im PortOrdner, returns ARC exit code *)
  23. VAR outputDone: BOOLEAN;
  24.  
  25. PROCEDURE ClearScreen();
  26. BEGIN
  27.   MagicDOS.Cconout(33C); MagicDOS.Cconout('E');
  28. END ClearScreen;
  29.  
  30. PROCEDURE outProc (ch: CHAR);
  31. BEGIN
  32.   outputDone := TRUE;
  33.   CatLog.Write (ch);
  34. END outProc;
  35.  
  36. PROCEDURE ExecProgram (VAR name, cmd: ARRAY OF CHAR; toLog: BOOLEAN; 
  37.                        noRedirect: BOOLEAN; redraw: BOOLEAN; VAR res: INTEGER);
  38. (* Wenn noRedirect angegeben ist, dann wird die Ausgabe des Programmes 
  39.  * nie umgelenkt.
  40.  *)
  41.   VAR env: ARRAY [0..1] OF CHAR;
  42.       pid, 
  43.       pipe    : INTEGER;
  44.       size    : LONGINT;
  45.       arcName : ARRAY [0..255] OF CHAR;
  46.       currentPath,
  47.       path    : ARRAY [0..255] OF CHAR;
  48. BEGIN
  49.   outputDone := FALSE;
  50.   mtDir.SplitPath (name, path, arcName, currentPath);
  51.   GetPath (currentPath);
  52.   IF SetPath (path) THEN END;
  53.   env := '';
  54.   IF MintUtil.IsMiNT() & ~noRedirect
  55.   THEN
  56.     (* Packer starten und Ausgabe in Pipe umlenken und Pipe leerlesen *)
  57.     pid := MintUtil.ExecPipe (name,cmd,env,pipe);
  58.     IF pid > 0 
  59.     THEN
  60.       REPEAT
  61.         size := MintUtil.ReadPipe (pid, pipe, arcName, res);
  62.         IF (size > 0) & toLog
  63.         THEN
  64.           (* šberlauf vermeiden *)
  65.           IF SHORT(size) < SIZE(arcName)
  66.           THEN 
  67.             arcName[SHORT(size)] := 0c;
  68.           END;
  69.           outputDone := TRUE;
  70.           CatLog.WriteString (arcName);
  71.         END;
  72.       UNTIL size < 0;
  73.     ELSE
  74.       IF pid = 0 THEN 
  75.         res := -1;
  76.       ELSE
  77.         res := pid;
  78.       END;
  79.       RETURN 
  80.     END;
  81.   ELSE
  82.     IF UserBLK.RedirectArcer & ~noRedirect
  83.     THEN
  84.       SetTrap(); 
  85.       IF toLog & CatGlobal.magIx & (CatGlobal.magIxVer >= $200)
  86.       THEN
  87.         SetOutputProc (ADDRESS(outProc));
  88.       END;
  89.     ELSE
  90.       ClearScreen();
  91.     END;
  92.     IF ORD(cmd[0]) > 126   (* L„nge der Kommandozeile *)
  93.     THEN
  94.       res := ExecV.Pexec(MagicDOS.LoadnGo, name, cmd, env);
  95.     ELSE
  96.       res := MagicDOS.Pexec(MagicDOS.LoadnGo, name, cmd, env);
  97.     END;
  98.     IF UserBLK.RedirectArcer & ~noRedirect THEN
  99.       RestoreTrap(); 
  100.       IF toLog
  101.       THEN
  102.         ClearOutputProc ();
  103.       END;
  104.     ELSE
  105.       IF redraw THEN CatGlobal.FullScreenRedraw(); END;
  106.     END;
  107.   END;
  108.   IF toLog & outputDone THEN CatLog.WriteLn; END;
  109.   IF SetPath (currentPath) THEN END;
  110. END ExecProgram;
  111.  
  112. PROCEDURE DeArc(toLog: BOOLEAN):INTEGER;
  113. VAR cmd,env : ARRAY[0..127] OF CHAR;
  114.     res : INTEGER;
  115.     arcName : ARRAY [0..255] OF CHAR;
  116.     pid, 
  117.     pipe    : INTEGER;
  118.     size    : LONGINT;
  119. BEGIN
  120.   cmd := ' ';
  121.   MagicStrings.Append(dearcStr, cmd);
  122.   cmd[0] := CHR(MagicStrings.Length(cmd));
  123.   env := '';
  124.   MagicStrings.Assign (ARCPath, arcName);
  125.   MagicStrings.Append (ARCName, arcName);
  126.   ExecProgram (arcName, cmd, toLog, FALSE, TRUE, res);
  127.   RETURN res
  128. END DeArc;
  129.  
  130. PROCEDURE Archive():INTEGER;
  131. VAR cmd,env : ARRAY[0..127] OF CHAR;
  132.     res : INTEGER;
  133.     arcName : ARRAY [0..255] OF CHAR;
  134.     pid, 
  135.     pipe    : INTEGER;
  136.     size    : LONGINT;
  137. BEGIN
  138.   cmd := ' ';
  139.   MagicStrings.Append(enarcStr, cmd);
  140.   cmd[0] := CHR(MagicStrings.Length(cmd));
  141.   env := '';
  142.   MagicStrings.Assign (ARCPath, arcName);
  143.   MagicStrings.Append (ARCName, arcName);
  144.   ExecProgram (arcName, cmd, FALSE, FALSE, TRUE, res);
  145.   RETURN res
  146. END Archive;
  147.  
  148. END ARCStarter.
  149.